home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / WWW / httpd_1.5.export / support / inc2shtml.c < prev    next >
C/C++ Source or Header  |  1995-11-09  |  3KB  |  109 lines

  1. /*
  2.  * inc2shtml: Convert httpd <1.1 style includes to 1.2 style
  3.  * 
  4.  * Rob McCool
  5.  * 
  6.  * Usage: inc2shtml [filename]
  7.  * 
  8.  * If filename is given, this program will open filename. If not, it will 
  9.  * look on stdin. It will output the new shtml file on stdout.
  10.  */
  11.  
  12. #include "config.h"
  13. #include "portability.h"
  14.  
  15. #include <stdio.h>
  16. #ifndef NO_STDLIB_H
  17. # include <stdlib.h>
  18. #endif /* NO_STDLIB_H */
  19. #include <ctype.h>
  20.  
  21. #define MAX_STRING_LEN 256
  22.  
  23. void usage(char *argv0) {
  24.     fprintf(stderr,"Usage: %s [filename]\n",argv0);
  25.     fprintf(stderr,"If filename is given, this program will open filename.\n");
  26.     fprintf(stderr,"If not, it will look on stdin for the inc file.\n");
  27.     fprintf(stderr,
  28.             "In either case, it will write the new shtml file on stdout.\n");
  29.     exit(1);
  30. }
  31.  
  32. void translate_tag(char *tag, FILE *fd) {
  33.     char *tp = tag, *tp2;
  34.     int url;
  35.  
  36.     url = (*tp == 'U' || *tp == 'u' ? 1 : 0);
  37.         
  38.     while(*tp++ != '\"');
  39.     tp2 = tp + 1;
  40.     while(*tp2 != '\"') ++tp2;
  41.     *tp2 = '\0';
  42.     if(*tp == '|') {
  43.         fprintf(fd,"<!--#exec cmd=\"%s",++tp);
  44.         if(url) fputs(" '$QUERY_STRING_UNESCAPED'",fd);
  45.         fputs("\"-->",fd);
  46.     } else
  47.         fprintf(fd,"<!--#include virtual=\"%s\"-->",tp);
  48. }
  49.  
  50. main(int argc, char *argv[]) {
  51.     FILE *f;
  52.     int c,x,p;
  53.     char c2;
  54.     char *lookfor = "<inc srv";
  55.  
  56.     switch(argc) {
  57.       case 1:
  58.         f = stdin;
  59.         break;
  60.       case 2:
  61.         if(!(f = fopen(argv[1],"r"))) {
  62.             perror("fopen");
  63.             exit(1);
  64.         }
  65.         break;
  66.       default:
  67.         usage(argv[0]);
  68.     }
  69.  
  70.     p=0;
  71.     while(1) {
  72.         c = fgetc(f);
  73.         if(c == -1) {
  74.             fflush(stdout);
  75.             exit(0);
  76.         }
  77.         c2 = (char)c;
  78.         if(isalpha((char)c))
  79.             c = tolower((char)c);
  80.         if(c == lookfor[p]) {
  81.             if(!lookfor[++p]) {
  82.                 char tag[MAX_STRING_LEN];
  83.  
  84.                 x=0;
  85.                 c = fgetc(f); /* get space */
  86.                 while(c != '>') {
  87.                     tag[x++] = c;
  88.                     c = fgetc(f);
  89.                     if(c == -1) {
  90.                         fputs("<inc srv ",stdout);
  91.                         fputs(tag,stdout);
  92.                         fflush(stdout);
  93.                         exit(1);
  94.                     }
  95.                 }
  96.                 tag[x] = '\0';
  97.                 translate_tag(tag,stdout);
  98.                 p = 0;
  99.             }
  100.         } 
  101.         else {
  102.             for(x=0;x<p;x++)
  103.                 fputc(lookfor[x],stdout);
  104.             fputc(c2,stdout);
  105.             p=0;
  106.         }
  107.     }
  108. }
  109.